/*
 * @Author: your name
 * @Date: 2020-08-23 16:32:23
 * @LastEditTime: 2020-08-23 16:53:35
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \react-exam\src\store\user.ts
 */
/* 引入mobx  action:动作  observable：装饰器  （useObservable:使数据变为响应式）  */
import { observable, action } from 'mobx';

/* 引入登录接口api */
import { login, getUserInfo, updateUserInfo } from '../service/index';

/* 引入token配置文件 */
import { setToken, removeToken } from '../utils';

/* 引入antd */
import { message } from 'antd';



/* import menus from '../router/menu';
import { IMenuItem, IRouterItem } from '../utils/interface'; */




export default class User {
    /* 数据  (使用@observable时，在tsconfig.json里面设置 experimentalDecorators:true(消除警告)) */
    @observable
    isLogin = false;

    /* 获取用户信息 */
    @observable
    userInfo:any = {};
    /* 获取开关 */
    isGetUserInfo = false;

    isGetViewAuthority = false;

    // @observable
    userViewAuthority: any = [];    // 用户拥有的视图权限
    // @observable
    forbiddenViewAuthority: any = [];   // 未授权的视图权限
    @observable
    routes: any = [];   // 用户的视图权限生成的路由

    /* 登录方法 */
    @action
    async loginAction(user_name: string, user_pwd: string) {
        /* 登录请求 */
        let result:any = await login(user_name, user_pwd);
       /*  console.log(result.data.code); */

        /* 判断 */
        if (result.data.code===1) {
            /* 设置token */
            setToken(result.data.token);
            this.isLogin = true;
            return true;
        }
        return false;
    }

    /* 退出 */
    @action
    async logoutAction() {
        /* 移除token */
        removeToken();
        /*  */
        this.isLogin = false;
       
    }

    /* 获取用户信息 */
    @action 
    async getUserInfoAction(){
        /* 判断开关 */
        if (this.isGetUserInfo){
            return;
        }
        /* 更改开关 */
        this.isGetUserInfo = true;
        /* 发送请求 */
        let result = await getUserInfo();
        /* console.log('result...',result.data); */
        
        /* 判断 */
        if (result.data){
            this.userInfo = result.data.data;
            
            this.isGetUserInfo = false;
        }
    }

    /* 更新用户信息 */
    @action
    async updateUserInfoAction(params:any){
        let result=await updateUserInfo(params);
        /* console.log('更新用户信息。。。',result); */

        if(result.data.code===1){
            this.getUserInfoAction();
            message.success(result.data.msg);
        }
    }

    // @action
    // async getUserViewAuthorityAction(){
    //     if (this.isGetViewAuthority){
    //         return;
    //     }
    //     this.isGetViewAuthority = true;
    //     let result = await getUserViewAuthority();


    //     if (result.data){
    //         // this.userViewAuthority = result.data.data;
    //         this.isGetViewAuthority = false;
    //         // 筛选用户拥有的视图权限和未授权的视图权限
    //         // 1. 拥有的视图权限渲染左边导航菜单
    //         // 2. 未授权的视图权限重定向到403页面
    //         var myMenu:any[] = [], forbiddenView:any [] = [];
    //         menus.forEach(item=>{
    //             var children:any[] = [];
    //             item.children.forEach(value=>{
    //                 if (result.data.data.some((view:any)=>{
    //                     return view.view_id === value.meta.view_id;
    //                 })){
    //                     children.push(value);
    //                 }else{
    //                     forbiddenView.push(value)
    //                 }
    //             })
    //             if (children.length){
    //                 myMenu.push({...item, children});
    //             }
    //         })
    //         this.userViewAuthority = myMenu;
    //         this.forbiddenViewAuthority = forbiddenView;
    //         this.routes = this.geneRouter(menus);
    //         console.log(".....routes......", this.routes);
    //     }
    // }

    // geneRouter(menus: IMenuItem[]){
    //     // 判断有没有获取用户已拥有的权限
    //     if (this.userViewAuthority.length){
    //         menus = this.userViewAuthority;
    //     }
    //     let routes: IRouterItem[] = [];
    //     menus.forEach(item=>{
    //         item.children.forEach(value=>value.component = value.meta.component)
    //         routes = routes.concat(item.children as unknown as IRouterItem[]);
    //     })
    //     // 获取用户未授权的权限
    //     if (this.forbiddenViewAuthority.length){
    //         this.forbiddenViewAuthority.forEach((item:any)=>{
    //             routes.push({path: item.path, redirect: '/403'});
    //         })
    //     }

    //     return routes;
    // }
}